package com.zy.mc_module.utils;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.os.Build;
import androidx.core.content.FileProvider;
import android.text.TextUtils;

import com.zy.mc_module.BuildConfig;

import java.io.File;
import java.net.FileNameMap;
import java.net.URLConnection;

public class OpenFileForApp {
    /**
     * 打开文件
     *
     * @paramfile
     */
    public static void openOrShareFile(Context context, File file, String action) {
        try {
            if (file == null || !file.exists()) {
                ToastUtil.show("文件不存在");
                return;
            }
            String file_type[] = file.getName().split("\\.");
            if (file_type.length == 1 || TextUtils.equals(file_type[file_type.length - 1], "key")) {
                ToastUtil.show("此文件类型不支持打开");
                return;
            }
            Intent intent = new Intent();
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            //设置intent的Action属性
            intent.setAction(action);
            FileNameMap fileNameMap = URLConnection.getFileNameMap();

            //获取文件file的MIME类型
//            String type = FileUtils.getMIMEType(file);
            String type = fileNameMap.getContentTypeFor(file.getName());
            ;
            //设置intent的data和Type属性。
            Uri uri = null;
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                uri = FileProvider.getUriForFile(context, BuildConfig.APPLICATION_ID + ".provider", file);
            } else {
                uri = Uri.fromFile(file);
            }
            //添加这一句表示对目标应用临时授权该Uri所代表的文件
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
                    | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            if (action.equals(Intent.ACTION_VIEW)) {
                intent.setDataAndType(uri, type);
                context.startActivity(intent);//这里最好try一下，有可能会报错。 //比如说你的MIME类型是打开邮箱，但是你手机里面没装邮箱客户端，就会报错。
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 分享文件
     *
     * @paramfile
     */
    public static void shareFile(File file, Context context) {
        try {
            if (file == null || !file.exists()) {
                ToastUtil.show("文件不存在");
                return;
            }
            Intent intent = new Intent(Intent.ACTION_SEND);
            intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
            //设置intent的data和Type属性。
            Uri uri = getUri(context, "com.zy.mc_module.FileProvider", file);
            //添加这一句表示对目标应用临时授权该Uri所代表的文件
            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
                    | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
            intent.putExtra(Intent.EXTRA_STREAM, uri);
            intent.setType("*/*");
            context.startActivity(Intent.createChooser(intent, "Alpha Share"));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    public static Uri getUri(Context context, String authorites, File file) {
        Uri uri;
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            //设置7.0以上共享文件，分享路径定义在xml/file_paths.xml
            uri = FileProvider.getUriForFile(context, authorites, file);
        } else {
            // 7.0以下,共享文件
            uri = Uri.fromFile(file);
        }
        return uri;
    }
}
